package com.javasm.springmybatis.mail;

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

/**
 * @Author：longjinyi
 * @Version：1.0
 * @Date：2021/12/29-22:55
 * @Since:jdk1.8
 * @Description:
 */
//异步发送邮件
//为什么要将这个类放入spring容器中？
//因为在controller包下的类中要通过当前类EmailService的对象调用当前类EmailService里面的方法
@Component
//将发送邮件EmailController的操作中，耗时的操作抽取到这里来
//springboot有默认线程池:线程有8 个
//ssm没有默认线程池

//异步任务需要注意：
//1.方法不能有返回值
//2.@Async注解下面的方法不能在controller包下的调用它的Controller类中( 如：EmailController )

//这两点注意违反的话，异步任务失效，判断依据：
//判断是不是异步
//判断是不是多线程
public class EmailService {


    @Async //开启多线程
    public void sendEmail() {

        //测试异步发送邮件，线程是不是多线程？线程是一个还是多个？

        //查看是否是多线程执行，有没有线程池，大小是多少？默认8个
        //拿到线程名称
        String name = Thread.currentThread().getName();

        System.out.println("threadname=========="+name);

        //直接这么输出的话，线程很短时间就走完了
        //为了便于观察，我们在这里给线程设置延迟时间
        //模拟耗时操作，延迟三秒
//        try {
//            TimeUnit.SECONDS.sleep(3);
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }



//        //设置验证码内容
//        String code = "mxt4488";
//        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
//        //设置发件人的名称和发送邮件的邮箱账号
//        simpleMailMessage.setFrom("清华大学<cd262233@163.com>");
//        //设置发送的邮件的主题
//        simpleMailMessage.setSubject("验证码");
//        //设置发送的邮件的内容
//        simpleMailMessage.setText(code);
//        //设置接收邮件的账号，账号可以给多个(即可以实现群发)
//        simpleMailMessage.setTo(email);
//        //将每次发送的验证码存进服务器，并设置失效时间
//        //"redis_key"+email:设置存储进服务器的k是接收邮件的邮箱账号
//        //code:要发送的验证码的内容
//        //30:失效时间，单位秒，时间单位根据设置的失效时间单位决定
//        //TimeUnit.SECONDS:设置失效时间单位
//        //stringRedisTemplate.opsForValue().set("redis_key"+email,code,30,TimeUnit.SECONDS);
//
//        //发送邮件，根据send方法的括号里面要传的参数，new一个 SimpleMailMessage的对象
//        //要发送信息存到对象simpleMailMessage里面
//        javaMailSender.send(simpleMailMessage);
    }
}
